package com.erp.remote.goods;

import com.erp.entity.goods.BatchDeleteGoodsDto;
import com.erp.entity.goods.GoodsEditDto;
import com.erp.entity.goods.GoodsQuery;
import com.erp.entity.goods.UltimateGoods;
import com.erp.util.AjaxResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.util.Map;

@RequestMapping("/goods")
public interface GoodsRemote {
    @PostMapping("/list")
    AjaxResult GoodsList(@RequestParam("params") Map<String, Object> params);

    // 价格查询,参数ids为商品id数组,quotationTyId报价类型id,customerId报价主体id
    @PostMapping("/price")
    AjaxResult GoodsPrice(@RequestParam("params") Map<String, Object> params);

    // 商品分页列表,自行使用（条件查询，包含是否查询0库存商品-isGetZero，分页信息-pageNum&pageSize，
    // 商品状态-searchStatus，搜索信息-searchValue，分类下的信息-selectedCategoryIds（点击某分类，他和他子级的ID列表）
    // 以及必填项-companyId）
    @PostMapping("/goodsTable")
    AjaxResult GoodsTable(@RequestBody GoodsQuery goodsQuery);

    //添加商品信息（封装较为复杂，不做阐述，自行查看实体）
    @PostMapping("/add")
    AjaxResult addGoods(@RequestPart("goods") String goods, @RequestPart("images")MultipartFile[] images);

//    @PostMapping("/edit")
//    AjaxResult editGoods(@RequestPart("goods") String goods, @RequestPart("images")MultipartFile[] images);
    @PostMapping("/edit")
    AjaxResult editGoods(@ModelAttribute GoodsEditDto goodsEditDto);

    @DeleteMapping("/delete/{id}")
    AjaxResult deleteGoods(@PathVariable("id") Integer goodsId);

    @PostMapping("/batchDelete")
    AjaxResult batchDeleteGoods(@RequestBody BatchDeleteGoodsDto batchDeleteGoodsDto);

    @GetMapping("/updateStatus")
    AjaxResult updateGoodsStatus(@RequestParam("goodsId") Integer goodsId, @RequestParam("newStatus") Integer newStatus);

    // 商品详情,单个，编辑时做回显（封装较为复杂，不做阐述，自行查看实体）
    @GetMapping("/detail/{id}")
    AjaxResult getGoodsDetail(@PathVariable("id") Integer id);

    @GetMapping("/oneGoods")
    AjaxResult oneGoods(@RequestParam("id") Integer id);

    @PostMapping("/batchStatus")
    AjaxResult batchUpdateGoodsStatus(@RequestBody Integer[] goodsIds, @RequestParam("newStatus") Integer newStatus);

    // 商品弹窗列表（较比分页列表，返回数据较少，只有基本商品信息Goods以及图像列表GoodsImage）,自行使用（条件查询，包含是否查询0库存商品-isGetZero，分页信息-pageNum&pageSize，
    // 商品状态-searchStatus，搜索信息-searchValue，分类下的信息-selectedCategoryIds（点击某分类，他和他子级的ID列表）
    // 以及必填项-companyId）
    @PostMapping("/windowGoods")
    AjaxResult windowGoods(@RequestBody GoodsQuery goodsQuery);

    // 选择的商品的详情。即在上面的弹窗列表中选中某些商品，确认之后，可拿到这些商品的详情列表
    // 前端返回为res.data.data。再下面是一个列表，存放若干个终极商品对象（UltimateGoods）
    // 参数，isOK标记是否是库存，0为否，1为是，意味着获得的数据的多寡（批次和预警）。
    @PostMapping("/goodsList")
    AjaxResult goodsList(@RequestBody Integer[] ids,@RequestParam("isOK") Integer isOK);

    @RequestMapping("/goodsByCodes")
    AjaxResult goodsByCodes(@RequestParam("codes") String[] codes);

    @GetMapping("/getWholeSalePrice")
    AjaxResult getWholeSalePrice(@RequestParam("goodsId") Integer goodsId);

    @GetMapping("/editWholeSalePrice")
    AjaxResult editWholeSalePrice(@RequestParam("goodsId") Integer goodsId, @RequestParam("price") BigDecimal price);


}
